from functools import wraps

# 不使用@wraps
def bad_decorator(func):
    def wrapper(*args, **kwargs):
        """这里包装函数的文档"""
        return func(*args, **kwargs)
    return wrapper


# 使用@wraps
def good_decorator(func):
    @wraps(func)    # 保持原函数的元信息
    def wrapper(*args, **kwargs):
        """这里包装函数的文档"""
        return func(*args, **kwargs)
    return wrapper


@bad_decorator
def my_function():
    """这里原函数的文档（my_function）"""
    return "Hello World!"

# 元信息
print("不使用@wraps:")
print(f"函数名：{my_function.__name__}")
print(f"函数文档：{my_function.__doc__}")

@good_decorator
def my_function2():
    """这里原函数的文档（my_function2）"""
    return "Hello World!"

# 元信息
print("\n使用@wraps:")
print(f"函数名：{my_function2.__name__}")
print(f"函数文档：{my_function2.__doc__}")

